#include "CalculatorDialog.h"

#include <QDoubleValidator>
Calculator::Calculator()
{
    // 界面初始化
    setupUi(this);

    // 设置数字验证器，使其只能输入数字形式内容
    m_editX->setValidator(new QDoubleValidator(this));
    m_editY->setValidator(new QDoubleValidator(this));

    // 信号和槽的连接
    // 左右操作数文本发生变化时，发送信号textChanged()
    // 如果连接的槽函数是当前父窗口自定义的，那么该函数第三个参数，也就是接收对象得是this
    QObject::connect(m_editX, SIGNAL(textChanged(QString)), this, SLOT(enableButton()));
    QObject::connect(m_editY, SIGNAL(textChanged(QString)), this, SLOT(enableButton()));

    // 点击按钮，发送信号clicked()
    QObject::connect(m_button, SIGNAL(clicked(bool)), this, SLOT(calcClicked()));
}

void Calculator::enableButton()
{
    bool X_Ok, Y_Ok;
    // text()，获取输入框文本，返回值是QString
    // toDouble()，将QString转换为double，参数是输出型参数，保存转换是否成功的结果
    m_editX->text().toDouble(&X_Ok);
    m_editY->text().toDouble(&Y_Ok);
    // 当左右操作数都输入了有效数据，则使能等号按钮，否则设置禁用
    m_button->setEnabled(X_Ok && Y_Ok);
}

void Calculator::calcClicked()
{
    double res = m_editX->text().toDouble() + m_editY->text().toDouble();
    QString str = QString::number(res);     // 将double转化为QString
    // 显示结果
    m_editZ->setText(str);
}
